#coding=gbk   #防止汉字不兼容
import sys
import os

def Count_Line(filename):
    global con
    if(filename == ''):
        print("程序结束 感谢您的使用")
        os.system("pause")
        sys.exit(0)
    try:
        wc = open(filename, 'r', encoding="utf-8")
    except Exception as e:
        print("except:这个报错是因为没有按照格式输入或者文件路径不存在导致的",'\n')
        print("按下回车键 程序即将退出 请重新进入", '\n', e)
        os.system("pause")
    wc = open(filename, 'r', encoding="utf-8")
    con = wc.readlines()
    #print(con)  #输出的是每一行里面的内容 以数组进行输出
    wc.close()
def Count_Str():    ##标点符号算作了字符（使用wps有感） 空格回车不算
    sum_str = 0
    for i in range(0,len(con)):

        num_str = ''.join(con[i].split())##去掉所有的空格
        sum_str = len(num_str) + sum_str
    return sum_str

def Count_Sec():##通过统计句点、叹号和问号的个数
    sum_sectence = 0
    x = 0
    for i in range(0,len(con)):
        num_sec = ''.join(con[i].split())##去掉所有的空格
        #print(num_sec)
        max = len(num_sec)
        for j in range(x,max):
            if(num_sec[j] == '.'): ##省略号必须有四个. 符合英语规范
                if(max-j > 3):
                    if(num_sec[j+2] == '.'):
                        sum_sectence = sum_sectence + 1
                        x = j + 3
                    else:
                        sum_sectence = sum_sectence + 1
                else:
                    sum_sectence = sum_sectence + 1
            if(num_sec[j] == '?' or num_sec[j] == '!'):
                sum_sectence = sum_sectence + 1
    return sum_sectence

def Count_Word():#空格数（连续也算作一个）加上句子的个数即可
    sum_word = 0
    sum_sectence = Count_Sec()
    for i in range(0,len(con)):
        num_word = ' '.join(con[i].split())
        #print(num_word)
        for j in range(1, len(num_word)):
            ###把所有的空格都合成一个 过滤掉每一行第一个空格
            if(num_word[j] == ' '):
                sum_word = sum_word + 1
    sum_word = sum_word + sum_sectence
    return sum_word

def Count_None():   ##统计空行数
    sum_none = 0
    for i in range(0, len(con)):

        if ( con[i] == '\n' ):  ##此处有一个小bug 记得注意斜杠的方向
            sum_none = sum_none + 1
        else:
            continue
    return sum_none

def Count_Code_Line():  ##统计代码行数
    sum_code_line = 0
    zengyi = 1
    for i in range(0, len(con)):
        sum_code_line = i + zengyi
    return sum_code_line

def Count_Dote():##仅仅针对python程序使用 注释的特点 一行里面只有一个'#'起作用
    sum_dote = 0
    for i in range(0, len(con)):
        #print(con[i])  ##测试代码 可以去掉
        num_dote = ''.join(con[i].split())##去掉所有的空格
        for j in range(0, len(num_dote)):
            if(num_dote[j] == '#'):
                sum_dote = sum_dote + 1
                break
    return sum_dote


if __name__ == "__main__":
    start_all()
    while True:
        #os.system("cmd")
        guolv,run_model, filename = map(str, input("wc.exe").split(' '))
        #前面只能有一个空格 间隔只能为一个空格 最后不允许添加空格 严格按照规范来
        Count_Line(filename)
        #如果文件名不对 是会直接报错的 无法运行'/'作为反斜杠 不要加''
        if(run_model == '-s'):
            print("该英文文本的字符数量：",Count_Str()) #多次实验 较为稳定
        elif (run_model == '-e'):
            print("该英文文本的句子数量：",Count_Sec()) #先去除前后空白 然后把空格合并成为一个
        elif (run_model == '-w'):
            print("该英文文本的单词数量：",Count_Word()) ##忘记说啥了
        elif (run_model == '-l'):
            print("代码行数量：",Count_Code_Line()) #多次实验 较为稳定
        elif (run_model == '-n'):
            print("空行数量：",Count_None()) #多次实验 较为稳定
        elif (run_model == '-d'):
            print("注释数量：",Count_Dote()) #多次实验 较为稳定(仅仅针对python程序）
        elif (run_model == '-tx'):
            print("该英文文本的字符数量：", Count_Str())
            print("该英文文本的句子数量：", Count_Sec())
            print("该英文文本的单词数量：", Count_Word())
        elif (run_model == '-co'):
            print("代码行数量：", Count_Code_Line())
            print("空行数量：", Count_None())
            print("注释数量：", Count_Dote())
        elif (run_model == '-p'):
            print("程序结束 感谢您的使用")
            os.system("pause")
            sys.exit(0)
        else:
            print("输入格式有误")
